/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package transervfx.Logica;

import java.util.List;

import transervfx.Dato.DAO.RepartidorDAO;
import transervfx.Dato.Entidad.Repartidor;
import transervfx.Dato.Entidad.ZonaRegional;

/**
 *
 * @author meli
 */
public class GestorRepartidor {

    private static GestorRepartidor INSTANCE = null;

    public GestorRepartidor() {
    }

    private synchronized static void createInstance() {
        if (INSTANCE == null) {
            INSTANCE = new GestorRepartidor();
        }
    }

    public static GestorRepartidor getInstance() {
        if (INSTANCE == null) {
            createInstance();
        }
        return INSTANCE;
    }

    public void guardarRepartidor(Repartidor r) {
        RepartidorDAO.getInstance().persist(r);
    }

    public void actualizarRepartidor(Repartidor r) {
        RepartidorDAO.getInstance().update(r);
    }

    public void eliminarRepartidor(Repartidor r) throws Exception {
        //esto lanzaria una excepcion a la ventana, la cual mostraria el error (el msj de la exception)
        //entonces conviene meterle excepciones y dsespues lo cazas cuando tengas que mostrr el msj de error, o warning o eso
        //claro, porq el error puede ser por otra cosa, en este caso es solo por la guia, pero suponete q es por mas de una cosa
        //como no podes retornar multiples valores string se hace medio dificil, creo q esta forma es la mas limpia

        System.out.println("POSEE GUIA: " + RepartidorDAO.getInstance().poseeGuia(r));
        if (RepartidorDAO.getInstance().poseeGuia(r)) {
            throw new Exception("El repartidor posee una guia, no puede ser eliminado");
        }

        RepartidorDAO.getInstance().remove(r);
    }

    public boolean existeRepartidor(String tipoDoc, Integer nroDoc) {

        Repartidor r = RepartidorDAO.getInstance().findByTipoDocAndNroDoc(tipoDoc, nroDoc);
        if (r == null) {
            return false;
        } else {
            return true;
        }
    }
    public List<Repartidor> findAll() {
        return RepartidorDAO.getInstance().findAll();
    }

    public Repartidor findByCompleto(Repartidor repartidorSeleccionado) {
        return RepartidorDAO.getInstance().findByCompleto(repartidorSeleccionado);
    }

    public List<Repartidor> findByNombresAndApellido(String nombres, String apellido) {
        return RepartidorDAO.getInstance().findByNombresAndApellido(nombres, apellido);
    }

    public Long numeroDeRepartidoresFiltrados(String apellido, String nombres, String tipoDocumento, Integer numeroDocumento, String condicionIva, String movilidad, ZonaRegional zona, boolean interno, boolean externo) {
        return RepartidorDAO.getInstance().numeroDeRepartidoresFiltrados(apellido, nombres, tipoDocumento, numeroDocumento, condicionIva, movilidad, zona, interno, externo);
    }

    public List<Repartidor> buscarPorFiltro(String apellido, String nombres, String tipoDocumento, Integer numeroDocumento, String condicionIva, String movilidad, ZonaRegional zona, boolean interno, boolean externo, int ini, int fin) {
        return RepartidorDAO.getInstance().buscarPorFiltroRango(apellido, nombres, tipoDocumento, numeroDocumento, condicionIva, movilidad, zona, interno, externo, ini, fin);
    }
}
